package d11_test02;

import java.util.*;

public class MyRunnable02_2 implements Runnable{
    //共享奖池
    private final List<Integer> jackpot;

    //各自奖箱结果
    private final Map<String, List<Integer>> results = new HashMap<>();
    //用于同步的锁对象
    private final Object lock = new Object();
    public MyRunnable02_2(List<Integer> jackpot) {
        this.jackpot = jackpot;
        results.put("抽奖箱1", new ArrayList<>());
        results.put("抽奖箱2", new ArrayList<>());
    }

    @Override
    public void run() {
        //获取当线程的名字
        String boxName = Thread.currentThread().getName();
        //创建一个随机数对象
        Random random = new Random();
        while (true) {
            synchronized (jackpot){ //首先保证线程安全
                if (jackpot.isEmpty()){
                    break;
                }

                //随机抽取一个奖品
                int index = random.nextInt(jackpot.size());
                int price = jackpot.remove(index);

                //记录到对应抽奖箱的结果中去
                results.get(boxName).add(price);

            }
        }
    }
    public void printResults() {
        results.forEach((boxName, prizes) -> {
            if (!prizes.isEmpty()) {
                int total = prizes.stream().mapToInt(Integer::intValue).sum();
                int max = prizes.stream().max(Integer::compare).orElse(0);

                System.out.printf("在此次抽奖过程中，%s总共产生了%d个奖项，分别为：%s，最高奖项为%d元，总计额为%d元%n",
                        boxName, prizes.size(), prizes, max, total);
            }
        });

        // 比较最大奖项
        int max1 = results.get("抽奖箱1").stream().max(Integer::compare).orElse(0);
        int max2 = results.get("抽奖箱2").stream().max(Integer::compare).orElse(0);

        if (max1 > max2) {
            System.out.printf("在此次抽奖过程中，抽奖箱1中产生了最大奖项，该奖项金额为%d元%n", max1);
        } else if (max2 > max1) {
            System.out.printf("在此次抽奖过程中，抽奖箱2中产生了最大奖项，该奖项金额为%d元%n", max2);
        } else if (max1 > 0) {
            System.out.printf("在此次抽奖过程中，两个抽奖箱产生了相同的最大奖项，金额为%d元%n", max1);
        }}

}
